#ifndef __HW_H_
#define __HW_H_

#include <stdint.h>

// ----------------------------
// 寄存器定义（STM32F100）
// ----------------------------
#define PERIPH_BASE         0x40000000UL
#define APB2PERIPH_BASE     (PERIPH_BASE + 0x00010000UL)
#define AHBPERIPH_BASE      (PERIPH_BASE + 0x00020000UL)

// RCC
#define RCC_BASE            (AHBPERIPH_BASE + 0x1000UL)
#define RCC_APB2ENR         *(volatile uint32_t *)(RCC_BASE + 0x18)
#define RCC_CR              *(volatile uint32_t *)(RCC_BASE + 0x00)

// GPIOA
#define GPIOA_BASE          (APB2PERIPH_BASE + 0x0800UL)
#define GPIOA_CRH           *(volatile uint32_t *)(GPIOA_BASE + 0x04)

// USART1
#define USART1_BASE         (APB2PERIPH_BASE + 0x3800UL)
#define USART1_CR1          *(volatile uint32_t *)(USART1_BASE + 0x00)
#define USART1_CR2          *(volatile uint32_t *)(USART1_BASE + 0x04)
#define USART1_BRR          *(volatile uint32_t *)(USART1_BASE + 0x0C)
#define USART1_SR           *(volatile uint32_t *)(USART1_BASE + 0x00)
#define USART1_DR           *(volatile uint32_t *)(USART1_BASE + 0x04)

// ----------------------------
// SysTick 寄存器定义（Cortex-M3 内核）
// ----------------------------
#define SYSTICK_BASE        0xE000E010UL                  // SysTick 基地址
#define SYSTICK_CTRL        *(volatile uint32_t *)(SYSTICK_BASE + 0x00)  // 控制寄存器
#define SYSTICK_LOAD        *(volatile uint32_t *)(SYSTICK_BASE + 0x04)  // 重载值寄存器
#define SYSTICK_VAL         *(volatile uint32_t *)(SYSTICK_BASE + 0x08)  // 当前值寄存器
#define SYSTICK_CALIB       *(volatile uint32_t *)(SYSTICK_BASE + 0x0C)  // 校准寄存器


#endif

